﻿package fr.babos.core.events 
{
	/**
	 * Imports
	 */
	import flash.events.Event;
	import fr.babos.core.data.remote.RemotingCall;
	
	/**
	 * Les évènements des remotes
	 * @author ZoulouX
	 */
	public class RemoteEvent extends Event 
	{
		/**
		 * Appel sur la remote.
		 */
		public static const CALL					:String 			= "call";
		
		/**
		 * Réponse sur la remote.
		 */
		public static const RESPONSE				:String 			= "response";
		
		/**
		 * Erreur sur la remote.
		 * Cette erreur n'a pas été volontaire.
		 * Il est possible que le call ne soit pas défini, si l'erreur n'a pas été déterminée.
		 */
		public static const REMOTE_ERROR			:String 			= "remoteError";
		
		/**
		 * Erreur reçu par la réponse.
		 * L'erreur peut avoir été envoyée du serveur, c'est une erreur déclanchée volontairement.
		 */
		public static const RESPONSE_ERROR			:String 			= "reponseError";
		
		
		/**
		 * L'appel associé à l'évènement
		 */
		protected var _call							:RemotingCall;
		
		/**
		 * Le message d'erreur s'il y a lieu
		 */
		public var message							:String;
		
		/**
		 * Le code d'erreur s'il y a lieu
		 */
		public var code								:uint;
		
		/**
		 * L'appel associé à l'évènement
		 */
		public function get call ():RemotingCall { return _call; }
		
		/**
		 * Le constructeur
		 * @param	pCall : L'appel associé à l'évènement
		 * @param	type : Le type d'évènement
		 */
		public function RemoteEvent (type:String, pCall:RemotingCall = null, bubbles:Boolean = false, cancelable:Boolean = false)
		{
			// Relayer la construction
			super(type, bubbles, cancelable);
			
			// Enregistrer le call s'il est différent de null
			if (pCall != null)
				_call = pCall;
		} 
		
		/**
		 * Cloner
		 */
		public override function clone ():Event 
		{ 
			return new RemoteEvent(type, _call, bubbles, cancelable);
		} 
		
		/**
		 * Afficher
		 */
		public override function toString ():String 
		{ 
			return formatToString("RemoteEvent", "type", "bubbles", "cancelable", "eventPhase"); 
		}
	}
}